<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>API 接口介绍</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
            background: linear-gradient(135deg, #f5f7fa, #c3cfe2);
            color: #333;
        }
        h1 {
            color: #333;
            text-align: center;
            margin-bottom: 30px;
            font-size: 2.5rem;
        }
        h2 {
            color: #555;
            margin-top: 15px;
            margin-bottom: 10px;
            cursor: pointer;
            transition: color 0.3s ease;
            user-select: none;
        }
        h2:hover {
            color: #4CAF50;
        }
        .content {
            display: none;
            padding: 10px;
            background-color: #fff;
            border-radius: 8px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
            margin-top: 5px;
        }
        .expanded .content {
            display: block;
        }
        .button {
            display: inline-block;
            padding: 10px 20px;
            background-color: #4CAF50;
            color: white;
            text-decoration: none;
            border-radius: 4px;
            margin-top: 20px;
            transition: background-color 0.3s ease;
        }
        .button:hover {
            background-color: #45a049;
        }
        .container {
            background-color: #fff;
            padding: 20px;
            border-radius: 12px;
            box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
        }
        pre {
            background-color: #f9f9f9;
            padding: 10px;
            border-radius: 4px;
            overflow-x: auto;
            margin: 5px 0;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 5px;
            background-color: #fff;
            box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f4f4f4;
            font-weight: bold;
        }
        .api-section {
            margin-bottom: 20px;
            border-bottom: 1px solid #eee;
            padding-bottom: 20px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>API 接口介绍</h1>

        <!-- 新增路由介绍 -->
        <div class="api-section">
            <h2 onclick="toggleSection(this)">1. 用户注册</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/api/register/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "username": "用户名",
    "email": "用户邮箱",
    "password": "用户密码",
    "captcha": "验证码",
    "captcha_id": "验证码ID"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 201,
    "success": true,
    "message": "注册成功",
    "data": {
        "id": 用户ID
    }
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">2. 用户登录</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/api/login/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "id": "用户账号",
    "email": "用户邮箱",
    "name": "用户名",
    (以上3个只要一个，若有多个则id>email>name)

    "password": "密码",
    "captcha": "验证码",
    "captcha_id": "验证码ID"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "token": "访问令牌",
    "expires_in": 令牌有效期（秒）
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">3. 获取验证码</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/api/captcha/</code></p>
                <p><strong>方法：</strong> GET</p>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "data": {
        "image": "验证码图片的Base64编码",
        "captcha_id": "验证码ID"
    }
}
                </pre>
            </div>
        </div>

        <!-- 保留未废弃的路由介绍 -->
        <div class="api-section">
            <h2 onclick="toggleSection(this)">4. 获取修改密码验证码</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/captcha/email/</code></p>
                <p><strong>方法：</strong> GET</p>
                <p><strong>请求参数：</strong></p>
                <pre>
{
    "email": "用户邮箱"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "data": null
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">5. 修改用户密码</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/change_password/captcha/verify/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "email": "用户邮箱",
    "emailVerificationCode": "验证码",
    "newPassword": "新密码"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "success": true,
    "message": "密码修改成功"
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">6. 验证用户令牌</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/verify/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{

}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 204,
    "success": true,
    "message": "验证成功"
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">7. 查询用户个人信息</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/userinfo/search/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "userinfolist": ["email", "name", ...]
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "success": true,
    "message": "访问用户信息成功",
    "data": {
        "name": "用户名",
        "email": "用户邮箱",
        ...
    }
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">8. 查询用户的所有名片夹</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/holder/search/all/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "success": true,
    "message": "访问名片夹列表成功",
    "data": {
        "holder": [{id:id1,name:"名片夹1"}, {id:id2,name:"名片夹2"}, ...]
    }
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">9. 创建一个新的名片夹</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/holder/create/1/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holdername": "名片夹名"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 204,
    "success": true,
    "message": "名片夹创建成功"
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">10. 重命名名片夹</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/holder/rename/1/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "oldholdername": "旧名片夹名",
    "newholdername": "新名片夹名"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 204,
    "success": true,
    "message": "名片夹重命名成功"
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">11. 向指定名片夹插入一条名片信息</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/namecard/insert/1/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holderid": "名片夹ID",
    "namecard": {
        "name": "姓名",
        "institution": "机构",
        "position": "职务",
        "sex": "性别",
        "phone": "电话",
        "email": "邮箱",
        "address": "地址",
        "weixinid": "微信号",
        "birthday": "出生日期（yyyymmdd）"
    }
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "success": true,
    "message": "名片插入成功",
    "data": {
        "cardid": 新增名片ID
    }
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">12. 向指定名片夹插入多条名片信息</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/namecard/insert/some/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "holderid": 名片夹ID,
    "namecards": [
        {
            "name": "姓名",
            "institution": "机构名称",
            "position": "职位",
            "sex": "性别",
            "phone": "电话",
            "email": "邮箱",
            "address": "地址",
            "weixinid": "微信号",
            "birthday": "出生日期（yyyymmdd）"
        },
        {
            "name": "姓名",
            "institution": "机构名称",
            "position": "职位",
            "sex": "性别",
            "phone": "电话",
            "email": "邮箱",
            "address": "地址"
        },
            ...
    ]
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "success": true,
    "message": "名片插入成功",
    "data": {
        "cardnumber": 新增名片的数量
    }
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">13. 查询指定名片夹中的所有名片信息</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/namecard/search/all/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holderid": "名片夹ID"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "success": true,
    "message": "名片查询成功",
    "data": [
        {"id": 1, "name": "姓名", ...},
        ...
    ]
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">14. 根据ID列表查询指定名片夹中的多张名片信息</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/namecard/search/some/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holderid": "名片夹ID",
    "cardids": [名片ID1, 名片ID2, ...]
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "success": true,
    "message": "名片查询成功",
    "data": [
        {"id": 1, "name": "姓名", ...},
        ...
    ]
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">15. 更新指定名片夹中的一张名片信息</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/namecard/update/1/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holderid": "名片夹ID",
    "namecard": {
        "id": 名片ID,
        "name": "姓名",
        "institution": "机构",
        "position": "职务",
        "sex": "性别",
        "phone": "电话",
        "email": "邮箱",
        "address": "地址",
        "weixinid": "微信号",
        "birthday": "出生日期（yyyymmdd）"
    }
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "success": true,
    "message": "名片修改成功"
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">16. 删除指定名片夹中的一张名片</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/namecard/delete/1/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holderid": "名片夹ID",
    "cardid": "名片ID"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "success": true,
    "message": "名片删除成功"
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">17. 将单个名片夹移入回收站</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/holder/recycle/1/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holderid": "名片夹ID"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 204,
    "success": true,
    "message": "名片夹移入回收站成功"
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">18. 将单个名片夹移出回收站</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/holder/restore/1/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holderid": "名片夹ID"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 204,
    "success": true,
    "message": "名片夹移出回收站成功"
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">19. 删除单个名片夹</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/holder/delete/1/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holderid": "名片夹ID"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 204,
    "success": true,
    "message": "名片夹删除成功"
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">20. 查询回收站中的所有名片夹</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/holder/recycle/search/all/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "success": true,
    "message": "访问回收站名片夹列表成功",
    "data": {
        "holder": [{id:id1,name:"名片夹1"}, {id:id2,name:"名片夹2"}, ...]
    }
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">21. 将单张名片移入回收站</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/namecard/recycle/1/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holderid": "名片夹ID",
    "cardid": "名片ID"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 204,
    "success": true,
    "message": "名片移入回收站成功"
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">22. 将单张名片移出回收站</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/namecard/restore/1/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holderid": "名片夹ID",
    "cardid": "名片ID"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 204,
    "success": true,
    "message": "名片移出回收站成功"
}
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">23. 查询回收站中的所有名片</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/namecard/recycle/search/all/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "holderid": "名片夹ID"
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
{
    "code": 200,
    "success": true,
    "message": "名片查询成功",
    "data": [
        {"id": 1, "name": "姓名", ...},
        ...
    ]
}
                </pre>
            </div>
        </div>


        <div class="api-section">
            <h2 onclick="toggleSection(this)">24. 删除权限</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/delete/user/permission/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "userid0": 普通用户id
    "permission_ids": 权限ID列表
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
成功:
    {
        "code": 204,
        "success": true,
        "message": "删除权限成功"
    }
失败:
    {
        "code": 400,
        "success": false,
        "message": "错误信息"
    }
                </pre>
            </div>
        </div>

        <div class="api-section">
            <h2 onclick="toggleSection(this)">25. 添加权限</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/add/user/permission/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    （需要携带令牌）
    "userid0": 普通用户id
    "permission_ids": 权限ID列表
}
                </pre>
                <p><strong>返回值示例：</strong></p>
                <pre>
成功:
    {
        "code": 204,
        "success": true,
        "message": "添加权限成功"
    }
失败:
    {
        "code": 400,
        "success": false,
        "message": "错误信息"
    }
                </pre>
            </div>
        </div>

        <!-- 新增查找替换功能 -->
        <div class="api-section">
            <h2 onclick="toggleSection(this)">26. 关键词查找名片</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/namecard/search/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "holderid": 名片夹ID,
    "keyword": "查找关键词",
    "fields": ["name", "sex", "phone", ...]
}
                </pre>
            </div>
        </div>

<!--        <div class="api-section">-->
<!--            <h2 onclick="toggleSection(this)">27. 单条替换名片信息</h2>-->
<!--            <div class="content">-->
<!--                <p><strong>路径：</strong> <code>/namecard/replace/one/</code></p>-->
<!--                <p><strong>方法：</strong> POST</p>-->
<!--                <p><strong>请求格式：</strong></p>-->
<!--                <pre>-->
<!--{-->
<!--    "holderid": 名片夹ID,-->
<!--    "findText": "查找内容",-->
<!--    "replaceText": "替换内容",-->
<!--    "fields": ["sex"]-->
<!--}-->
<!--                </pre>-->
<!--            </div>-->
<!--        </div>-->

<!--        <div class="api-section">-->
<!--            <h2 onclick="toggleSection(this)">28. 批量替换名片信息</h2>-->
<!--            <div class="content">-->
<!--                <p><strong>路径：</strong> <code>/namecard/replace/all/</code></p>-->
<!--                <p><strong>方法：</strong> POST</p>-->
<!--                <p><strong>请求格式：</strong></p>-->
<!--                <pre>-->
<!--{-->
<!--    "holderid": 名片夹ID,-->
<!--    "findText": "查找内容",-->
<!--    "replaceText": "替换内容",-->
<!--    "fields": ["position"]-->
<!--}-->
<!--                </pre>-->
<!--            </div>-->
<!--        </div>-->
<!--        <div class="api-section">-->
<!--            <h2 onclick="toggleSection(this)">29. 管理员添加用户权限</h2>-->
<!--            <div class="content">-->
<!--                <p><strong>路径：</strong> <code>/add/user/permission/</code></p>-->
<!--                <p><strong>方法：</strong> POST</p>-->
<!--                <p><strong>请求格式：</strong></p>-->
<!--                <pre>-->
<!--{-->
<!--    "userid0": 普通用户id-->
<!--    "permission_ids": 权限ID列表-->
<!--}-->

<!--                </pre>-->
<!--            </div>-->
<!--        </div>-->
<!--        <div class="api-section">-->
<!--            <h2 onclick="toggleSection(this)">30. 管理员删除用户权限</h2>-->
<!--            <div class="content">-->
<!--                <p><strong>路径：</strong> <code>/delete/user/permission/</code></p>-->
<!--                <p><strong>方法：</strong> POST</p>-->
<!--                <p><strong>请求格式：</strong></p>-->
<!--                <pre>-->
<!--{-->
<!--    "userid0": 普通用户id-->
<!--    "permission_ids": 权限ID列表-->
<!--}-->

<!--                </pre>-->
<!--            </div>-->
<!--        </div>-->
        <div class="api-section">
            <h2 onclick="toggleSection(this)">31. 管理员重置用户权限</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/reset/user/permission/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "userid0": 普通用户id
}

                </pre>
            </div>
        </div>
        <div class="api-section">
            <h2 onclick="toggleSection(this)">32. 超级管理员设置用户权限等级</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/user/privilegelevel/set/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "userid0": 普通用户id,
    "privilegelevel": 用户权限等级
}

                </pre>
            </div>
        </div>
        <div class="api-section">
            <h2 onclick="toggleSection(this)">33. 管理员搜索指定用户所有权限</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/search/user/permission/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "userid0": 普通用户id
}

                </pre>
            </div>
        </div>
        <div class="api-section">
            <h2 onclick="toggleSection(this)">34. 获取权限列表</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/get/all/permission/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
}

                </pre>
            </div>
        </div>
        <div class="api-section">
            <h2 onclick="toggleSection(this)">35. 管理员新增用户</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/api/admin/add/user/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "username": "用户名",
    "email": "邮箱",
    "password": "密码"
}

                </pre>
            </div>
        </div>
        <div class="api-section">
            <h2 onclick="toggleSection(this)">36. 查询指定用户信息</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/admin/search/userinfo/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    userid0:所要查询的用户id
}

                </pre>
            </div>
        </div>
        <div class="api-section">
            <h2 onclick="toggleSection(this)">37. 获取所有用户信息</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/get/all/userinfo/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{

}

                </pre>
            </div>
        </div>
        <div class="api-section">
            <h2 onclick="toggleSection(this)">38. 管理员重置用户密码</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/admin/change_password/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "userid0": 用户ID
}

                </pre>
            </div>
        </div>
        <div class="api-section">
            <h2 onclick="toggleSection(this)">39. 管理员锁定指定用户</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/user/lock/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "userid0": 用户ID
}

                </pre>
            </div>
        </div>
        <div class="api-section">
            <h2 onclick="toggleSection(this)">40. 管理员解锁指定用户并重置登录失败次数</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/user/unlock_and_reset_failed_attempts/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "userid0": 用户ID
}

                </pre>
            </div>
        </div>
        <div class="api-section">
            <h2 onclick="toggleSection(this)">41. 管理员获取系统允许的登录错误次数</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/get/login_try_times/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{

}

                </pre>
            </div>
        </div>
        <div class="api-section">
            <h2 onclick="toggleSection(this)">42. 管理员设置系统允许的登录错误次数</h2>
            <div class="content">
                <p><strong>路径：</strong> <code>/set/login_try_times/</code></p>
                <p><strong>方法：</strong> POST</p>
                <p><strong>请求格式：</strong></p>
                <pre>
{
    "login_try_times": 次数
}

                </pre>
            </div>
        </div>
    </div>

        <a href="#" class="button">返回顶部</a>
    </div>

    <script>
        function toggleSection(element) {
            const section = element.parentElement;
            section.classList.toggle('expanded');
        }
    </script>
</body>
</html>